import time
import requests
import pandas as pd
from .spider_def import delay, headers
from .ranking_spider import get_img_page_info


def get_img_page_url_list(limit_num: int = 18, offset: int = 0) -> list[str]:
    r"""获取该网站最热门作品榜单链接列表。

    :param limit_num: 每次获取的作品数。
    :param offset: 榜单开始位置，例如若limit_num=18， offset=10，即获取榜单名次10~27名的作品链接列表。
    :return: 一个包含作品主页链接的列表，格式为‘/illust/111588052’。
    """
    time.sleep(delay)
    url = f'https://www.vilipix.com/api/v1/picture/public?limit={limit_num}&offset={offset}&sort=hot&type=0'
    res = requests.get(url, headers=headers)
    if res.status_code != 200:
        raise Exception()
    if res.json()['code'] != 0:
        raise Exception()

    return [f'/illust/{img_info["picture_id"]}' for img_info in res.json()['data']['rows']]


def get_top_img_info(top_num: int = 100) -> list[dict]:
    r"""获取热度最高的作品信息，默认获取热度前100的作品信息

    :param top_num: 获取个数，如果为100，即获取热度前100的作品信息
    :return: 包含图片信息字典的列表，按热度从高到低排列
    """
    result_list = []
    limit_num = 18
    now_offset = 0
    while now_offset < top_num:
        if top_num - now_offset < limit_num:
            limit_num = top_num - now_offset
        url_list = get_img_page_url_list(limit_num, now_offset)
        for url in url_list:
            result_list.append(get_img_page_info(url))
        now_offset += limit_num
    return result_list
